﻿/**
 *
 * @file FITKPhyscisPropertyBeam.h
 * @brief 梁类定义
 * @author liuzhiyuan(liuzhiyuan@diso.cn)
 * @date 2024-10-18
 *
 */
#ifndef FITKPHYSCISPROPERTYBEAM_H
#define FITKPHYSCISPROPERTYBEAM_H
#include "FITKAcousticsAbsPhysicsProp.h"
#include "FITKAcousticsPhysicsAPI.h"

namespace Acoustics
{
    /**
    * @brief 梁数据结构定义
    * @author liuzhiyuan(liuzhiyuan@diso.cn)
    * @date 2024-10-15
    */
    class FITKAcousticsPhysicsAPI FITKPhyscisPropertyBeam : public FITKAcousticsAbsPhysicsProp
    {
        FITKCLASS(Acoustics, FITKPhyscisPropertyBeam);
        Q_OBJECT
    public:
        explicit FITKPhyscisPropertyBeam();
        virtual ~FITKPhyscisPropertyBeam();
        /**
         * @brief 获取类型
         * @return AcousticsPhyscisPropType 类型
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        AcousticsPhyscisPropType getPhysicsPropType() override;
        /**
         * @brief 获取截面积
         * @return crossSectionArea 截面积
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getCrossSectionArea() const;
        /**
         * @brief 设置截面积
         * @param[i] double 截面积
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setCrossSectionArea(double crossSectionArea);
        /**
         * @brief 获取截面积周长
         * @return perimeter 截面积周长
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getPerimeter() const;
        /**
         * @brief 设置截面积周长
         * @param[i] double 截面积周长
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setPerimeter(double perimeter);
        /**
         * @brief 获取截面惯性矩x
         * @return secondMomentX 截面惯性矩x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getSecondMomentX() const;
        /**
         * @brief 设置截面惯性矩x
         * @param[i] double 截面惯性矩x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setSecondMomentX(double secondmomentX);
        /**
         * @brief 获取截面惯性矩y
         * @return secondMomentY 截面惯性矩y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getSecondMomentY() const;
        /**
         * @brief 设置截面惯性矩y
         * @param[i] double 截面惯性矩y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setSecondMomentY(double secondmomentY);
        /**
         * @brief 获取截面极惯性矩
         * @return polarMoment 截面极惯性矩
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getPolarMoment() const;
        /**
         * @brief 设置截面极惯性矩
         * @param[i] double 截面极惯性矩
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setPolarMoment(double polarMoment);
        /**
         * @brief 获取扭转常数
         * @return torsionalConstant 扭转常数
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getTorsionalConstant() const;
        /**
         * @brief 设置扭转常数
         * @param[i] double 扭转常数
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setTorsionalConstant(double torsionalConstant);
        /**
         * @brief 获取剪心偏移x
         * @return shearOffsetX 剪心偏移x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getShearOffsetX() const;
        /**
         * @brief 设置剪心偏移x
         * @param[i] ShearOffsetY 剪心偏移x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setShearOffsetX(double shearOffsetX);
        /**
         * @brief 获取剪心偏移y
         * @return shearOffsetY 剪心偏移y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        double getShearOffsetY() const;
        /**
         * @brief 设置剪心偏移y
         * @param[i] double 剪心偏移y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-15
         */
        void setShearOffsetY(double sharOffsetY);
        /**
         * @brief    更新默认颜色
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-01-20
         */
        virtual void updateDefaultColor() override;

    private:
        /**
         * @brief  截面积
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _crossSectionArea { 0.0 };
        /**
         * @brief  截面积周长
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _perimeter { 0.0 };
        /**
         * @brief  截面惯性矩x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _secondmomentX { 0.0 };
        /**
         * @brief  截面惯性矩y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _secondmomentY { 0.0 };
        /**
         * @brief  截面极惯性矩
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _polarMoment { 0.0 };
        /**
         * @brief  扭转常数
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _torsionalConstant { 0.0 };
        /**
         * @brief  剪心偏移x
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */

        double _shearOffsetX { 0.0 };
        /**
         * @brief  剪心偏移y
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _shearOffsetY { 0.0 };
    };
}

#endif // FITKPHYSCISPROPERTYBEAM_H
